package com.hqyj.javaSpringCloudAccount.service;

import com.github.pagehelper.PageInfo;
import com.hqyj.entity.account.User;
import com.hqyj.entity.common.Result;
import com.hqyj.entity.common.SearchBean;
import com.hqyj.javaSpringCloudAccount.entity.UserVo;

import java.util.List;

public interface UserService {

    /**
     * 通过 id 获取 user 的信息
     * @param id
     * @return 返回 User
     */
    User getUserById(int id);

    /**
     * 用户登录
     * @param user
     * @return 返回 Result 封装信息
     */
    Result<User> login(User user);

    /**
     * 登出
     * 清除凭证信息、Session 信息
     */
    void logout();

    /**
     * 添加用户
     * @param user
     * @return 返回 Result 封装信息
     */
    Result<User> insertUser(User user);

    /**
     * user的多条件分页查询
     * @param searchBean
     * @return 返回 User 的 PageInfo 分页列表(MyBatis 方式)
     */
    PageInfo<User> getUsersBySearchBean(SearchBean searchBean);

    /**
     * 更新用户信息
     * @param user
     * @return 返回 Result 封装信息
     */
    Result<User> updateUser(User user);

    /**
     * 通过 id 删除用户
     * @param id
     * @return 返回 Result 封装信息，无法返回已被删除的用户，所以使用超类
     */
    Result<Object> deleteUserById(int id);

    /**
     * 通过用户名查询用户
     * @param userName
     * @return
     */
    User getUserByUserName(String userName);

    List<User> getUsersByKeyWord(String keyWord);

    /**
     * 示例之 微服务之间的调用，通过 RestTemplate 调用实现
     * @param id
     * @return
     */
    UserVo getUserVoById(int id);
}
